// frontend/js/order.js
new Vue({
    el: '#app',
    data: {
        cartItems: [],

        // [核心修改] 统一使用一个 order 对象来管理所有表单数据
        order: {
            customerName: '',
            note: '',
            handlerOpenId: '', // 将 handlerOpenId 移入 order 对象
            orderDetails: []
        },

        submitting: false,

        // --- 用于处理人列表的数据 ---
        handlerList: [],
        currentUserOpenId: ''
    },

    computed: {
        // [核心修改] 让 canSubmit 逻辑也使用统一的 order 对象
        canSubmit() {
            return this.order.customerName.trim() &&
                this.order.handlerOpenId && // 必须选择处理人
                this.cartItems.length > 0 &&
                !this.submitting;
        },

        // [核心修改] 过滤处理人列表的逻辑保持不变，非常棒
        filteredHandlerList() {
            if (this.currentUserOpenId) {
                return this.handlerList.filter(handler => handler.openId !== this.currentUserOpenId);
            }
            return this.handlerList;
        }
    },

    mounted() {
        this.restoreCart();
        this.autoFillCustomerName();
        this.getCurrentUserOpenId();
        this.fetchHandlers();
    },

    methods: {
        restoreCart() {
            try {
                const savedCart = localStorage.getItem('dishes_cart');
                if (savedCart) {
                    this.cartItems = JSON.parse(savedCart);
                    this.order.orderDetails = this.cartItems.map(item => ({
                        productId: item.id,
                        quantity: item.quantity
                        // productName 不需要提交，后端会自己查
                    }));
                }
            } catch (error) {
                console.error('恢复购物车失败:', error);
                this.cartItems = [];
            }
        },

        getCurrentUserOpenId() {
            const cookies = document.cookie.split('; ');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].split('=');
                if (cookie[0] === 'user_openid') {
                    this.currentUserOpenId = decodeURIComponent(cookie[1]);
                    console.log('当前用户OpenID:', this.currentUserOpenId);
                    return;
                }
            }
            console.warn('未在Cookie中找到 user_openid');
        },

        fetchHandlers() {
            var self = this;
            // [核心修改] 使用您 api.js 中定义好的 API.user.getAll()
            API.user.getAll()
                .then(function (data) {
                    // [核心修改] 修正后端返回字段的大小写 (userName -> username, nickName -> nickname)
                    self.handlerList = data.map(user => ({
                        openId: user.openId,
                        username: user.userName, // 修正字段名
                        nickname: user.nickName  // 修正字段名
                    }));
                    console.log('获取到的处理人列表:', self.handlerList);
                })
                .catch(function (error) {
                    // handleApiError 已经处理了弹窗，这里只在控制台记录
                    console.error('获取处理人列表失败的详细信息:', error);
                });
        },

        autoFillCustomerName() {
            const urlParams = new URLSearchParams(window.location.search);
            const nameFromUrl = urlParams.get('name');
            this.order.customerName = nameFromUrl || '宝贝';
        },

        goBack() {
            // 建议返回上一页，而不是写死 cart
            history.back();
        },

        async submitOrder() {
            if (!this.canSubmit) return;

            this.submitting = true;
            const loading = showLoading('提交订单中...');

            try {
                // [核心修改] 直接提交 this.order 对象，它已经包含了所有需要的数据
                const result = await API.order.create(this.order);

                localStorage.removeItem('dishes_cart');
                showSuccess('订单提交成功！已通过微信通知处理人');

                setTimeout(() => {
                    window.location.href = '/'; // 跳转回主页
                }, 1500);

            } catch (error) {
                handleApiError(error, '订单提交失败');
            } finally {
                this.submitting = false;
                hideLoading(loading);
            }
        }
    }
});